package com.avic.system.service;


import com.avic.system.dal.condition.PageQueryUserCondition;
import com.avic.system.dal.model.vo.UserSystemMenu;
import com.avic.system.dal.model.SystemPermission;
import com.avic.system.dal.model.SystemUser;

import java.util.List;

/**
 * 系统用户service
 *
 * @author: huangsheng
 * @date: 2017/10/19
 */
public interface SystemUserService {

    /**
     * 分页查询系统用户数据
     *
     * @author: huangsheng
     * @date: 2017/10/20 上午10:29
     */
    List<SystemUser> querySystemUserList(PageQueryUserCondition pageQueryUserCondition);

    /**
     * 分页查询系统用户数据总数
     *
     * @author: huangsheng
     * @date: 2017/10/20 上午10:29
     */
    int queryTotalRecords(PageQueryUserCondition pageQueryUserCondition);

    /**
     * 登入查询用户
     *
     * @param userLoginName 登入名
     * @param password      密码
     * @param loginIp       登入IP
     */
    SystemUser queryUserForLogin(String userLoginName, String password, String loginIp);

    /**
     * 创建用户
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午1:51
     */
    String createUser(SystemUser systemUser);

    /**
     * 批量创建用户角色数据
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午2:21
     */
    void batchCreateUserRole(List<String> roleIds, String userId);

    /**
     * 获取用户所拥有的角色id集合
     *
     * @param userId 用户id
     * @author: huangsheng
     * @date: 2017/10/25 下午3:49
     */
    List<String> getUserRoleIds(String userId);

    /**
     * 通过id获取用户信息
     *
     * @author: huangsheng
     * @date: 2017/10/25 下午3:50
     */
    SystemUser getUserByUserId(String userId);

    /**
     * 更新用户
     *
     * @param systemUser 系统用户对象
     * @return roleIds 角色ID集合
     */
    void updateUser(List<String> roleIds, SystemUser systemUser);

    void updateUser(SystemUser systemUser);

    /**
     * 修改用户状态，禁用or启用
     *
     * @param userState 用户状态 00启用， 01禁用
     * @param userId    用户id
     */
    void updateUserState(int userState, String userId);

    /**
     * 根据用户信息查询菜单数据
     *
     * @author: huangsheng
     * @date: 2017/10/26 下午4:57
     */
    List<UserSystemMenu> getUserMenuData(String userLoginName, String userId);

    /**
     * 获取用户权限
     *
     * @param userId 用户ID
     * @return
     */
    List<SystemPermission> getUserPermission(String userId);

    /**
     * 修改密码
     *
     * @param oldPassword 旧密码
     * @param password    修改的密码
     * @param employeeId  员工ID
     */
    void changePassword(String oldPassword, String password, String employeeId);


    void resetPassword(String password, String userId);
}
